<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="generator" content="VuePress 2.0.0-beta.32">
    <link rel="shortcut icon" href="/help/images/favicon.ico" type="image/x-icon"><title>码表设置 | PSI实施指南</title><meta name="description" content="PSI实施指南">
    <link rel="modulepreload" href="/help/assets/app.ae8b26c7.js"><link rel="modulepreload" href="/help/assets/08-03.html.5264f9b2.js"><link rel="modulepreload" href="/help/assets/plugin-vue_export-helper.21dcd24c.js"><link rel="modulepreload" href="/help/assets/08-03.html.cce7cd9e.js">
    <link rel="stylesheet" href="/help/assets/style.140447d0.css">
  </head>
  <body>
    <div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/help/" class=""><img class="logo" src="/help/images/logo.png" alt="PSI实施指南"><span class="site-name can-hide">PSI实施指南</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/help/user/" class="" aria-label="使用手册"><!--[--><!--]--> 使用手册 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/help/admin/" class="router-link-active" aria-label="系统管理"><!--[--><!--]--> 系统管理 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/help/dev/" class="" aria-label="二次开发"><!--[--><!--]--> 二次开发 <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a href="/help/user/" class="" aria-label="使用手册"><!--[--><!--]--> 使用手册 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/help/admin/" class="router-link-active" aria-label="系统管理"><!--[--><!--]--> 系统管理 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/help/dev/" class="" aria-label="二次开发"><!--[--><!--]--> 二次开发 <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p class="sidebar-item sidebar-heading">系统管理 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/help/admin/01.html" class="sidebar-item" aria-label="安装"><!--[--><!--]--> 安装 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02.html" class="sidebar-item" aria-label="初始化"><!--[--><!--]--> 初始化 <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/help/admin/02-01.html" class="sidebar-item" aria-label="用户管理"><!--[--><!--]--> 用户管理 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-02.html" class="sidebar-item" aria-label="权限管理"><!--[--><!--]--> 权限管理 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-04.html" class="sidebar-item" aria-label="物料"><!--[--><!--]--> 物料 <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/help/admin/02-04-01.html" class="sidebar-item" aria-label="物料计量单位"><!--[--><!--]--> 物料计量单位 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-04-02.html" class="sidebar-item" aria-label="物料品牌"><!--[--><!--]--> 物料品牌 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-04-03.html" class="sidebar-item" aria-label="价格体系"><!--[--><!--]--> 价格体系 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-04-04.html" class="sidebar-item" aria-label="成本分摊"><!--[--><!--]--> 成本分摊 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a href="/help/admin/02-07.html" class="sidebar-item" aria-label="供应商档案"><!--[--><!--]--> 供应商档案 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-08.html" class="sidebar-item" aria-label="客户资料"><!--[--><!--]--> 客户资料 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-05.html" class="sidebar-item" aria-label="仓库"><!--[--><!--]--> 仓库 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-06.html" class="sidebar-item" aria-label="库存建账"><!--[--><!--]--> 库存建账 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-03.html" class="sidebar-item" aria-label="业务设置"><!--[--><!--]--> 业务设置 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/02-09.html" class="sidebar-item" aria-label="工厂"><!--[--><!--]--> 工厂 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a href="/help/admin/03.html" class="sidebar-item" aria-label="业务日志"><!--[--><!--]--> 业务日志 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/04.html" class="sidebar-item" aria-label="如何升级PSI"><!--[--><!--]--> 如何升级PSI <!--[--><!--]--></a><!----></li><li><a href="/help/admin/05.html" class="sidebar-item" aria-label="数据域应用详解"><!--[--><!--]--> 数据域应用详解 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/06.html" class="sidebar-item" aria-label="环境变量"><!--[--><!--]--> 环境变量 <!--[--><!--]--></a><!----></li><li><a href="/help/admin/07.html" class="sidebar-item" aria-label="Lodop打印"><!--[--><!--]--> Lodop打印 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="码表设置" tabindex="-1"><a class="header-anchor" href="#码表设置" aria-hidden="true">#</a> 码表设置</h1><hr><h2 id="什么是码表" tabindex="-1"><a class="header-anchor" href="#什么是码表" aria-hidden="true">#</a> 什么是码表？</h2><p>码表是“编码表”的简称。在ERP中，编码是一项重要的管理工作，会有大量的基础数据是基于编码表的，所以PSI中抽象出了码表这一业务对象。</p><p>从技术层面来讲，码表是可以用一张数据库表(table)来存储的业务对象。</p><p>例如：商品分类、商品、客户分类、客户等等，就是可以用码表来表达的业务对象。</p><p>码表由系统固有字段和用户自定义字段两部分组成。</p><p>码表的“字段”、“列”是同一个业务含义。用“字段”的时候，更多是从数据库建模的角度；用“列”的时候，多半是从用户界面的角度来表达。</p><h2 id="码表系统固有字段" tabindex="-1"><a class="header-anchor" href="#码表系统固有字段" aria-hidden="true">#</a> 码表系统固有字段</h2><table><thead><tr><th>固有字段</th><th>列中文含义</th><th>说明</th></tr></thead><tbody><tr><td>id</td><td>唯一id</td><td></td></tr><tr><td>code</td><td>编码</td><td></td></tr><tr><td>name</td><td>名称</td><td></td></tr><tr><td>record_status</td><td>记录状态</td><td>启用或者停用，引用系统数据字典t_sysdict_record_status中的值</td></tr><tr><td>date_created</td><td>创建时间</td><td>记录创建时间</td></tr><tr><td>create_user_id</td><td>创建人id</td><td>记录创建人id，引用t_user的id字段</td></tr><tr><td>update_dt</td><td>编辑时间</td><td>记录最后一次编辑时间</td></tr><tr><td>update_user_id</td><td>编辑人id</td><td>记录最后一次编辑人的id，引用t_user的id字段</td></tr><tr><td>py</td><td>拼音字头</td><td>名称的拼音字头</td></tr><tr><td>data_org</td><td>数据域</td><td></td></tr><tr><td>company_id</td><td>公司id</td><td>引用t_org的id字段</td></tr></tbody></table><p>从上表可以看出，code和name是码表的核心业务字段。</p><h2 id="码表属性" tabindex="-1"><a class="header-anchor" href="#码表属性" aria-hidden="true">#</a> 码表属性</h2><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>分类</td><td>分类可以结合编码属性来使用</td></tr><tr><td>编码</td><td>给码表做出恰当的编码，便于管理大量的码表</td></tr><tr><td>名称</td><td>码表的中文名称</td></tr><tr><td>模块名称</td><td>模块名称会用于权限和主菜单中显示当前码表属于哪个模块。例如：码表的名称叫“币别”，模块名称叫“币别管理”。模块名称也可以和码表名称一致，这里根据实际的业务灵活设置。</td></tr><tr><td>数据库表名</td><td>每个码表都对应一个数据库中的表</td></tr><tr><td>层级数据</td><td>当码表需要是多级的时候，需要设置码表为层级数据。通常各种“分类”常为层级数据，例如：商品分类就可以设为层级数据。</td></tr><tr><td>编辑布局列数</td><td>新增或编辑一条码表记录的时候，会弹出页面给用户使用。通常编辑布局列数设置为1，码表的各个字段会从上到下依次排列。如果码表的自定义字段过多，可以把编辑布局列数设置为2，此时布局就会每行显示两个字段。</td></tr><tr><td>视图分页</td><td>当码表是层级数据的时候，即使设置了视图分页，也不会启用分页效果。</td></tr><tr><td>自动编码长度</td><td>值可以为0到20的整数。设置为0，表示不自动编码，编码需要用户手工输入。设置为其他整数，编码会自动生成流水号，例如：设置为5，自动生成长度为5位的类似00001、00002、00003这样的编码。</td></tr><tr><td>业务逻辑类名</td><td>带namespace的完整class名，用于指定该码表的后台业务逻辑插件代码。<br>例如：\Home\Plugin\CodeTable\DemoBLL 其实现代码见：<a href="https://gitee.com/crm8000/PSI/blob/master/web/Application/Home/Plugin/CodeTable/DemoBLL.class.php#L5" target="_blank" rel="noopener noreferrer">这里<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span></a> 。<br><br>具体的用法参考下面的<code>码表事件</code></td></tr></tbody></table><h2 id="码表事件" tabindex="-1"><a class="header-anchor" href="#码表事件" aria-hidden="true">#</a> 码表事件</h2><p>码表事件用于：当用户在新增、编辑和删除码表记录的时候，通过后台业务逻辑类来插入自定义业务逻辑。</p><table><thead><tr><th>事件</th><th>事件处理函数</th><th>说明</th></tr></thead><tbody><tr><td>新增码表记录</td><td>afterAdd</td><td>函数返回null表示可以继续执行新增操作; 返回字符串则会作为提示信息返回给用户，同时不执行新增操作（数据库事务会回滚）</td></tr><tr><td>编辑码表记录</td><td>afterUpdate</td><td>函数返回null表示可以继续执行编辑操作; 返回字符串则会作为提示信息返回给用户，同时不执行编辑操作（数据库事务会回滚）</td></tr><tr><td>删除码表记录</td><td>beforeDelete</td><td>函数null表示可以执行删除操作; 返回字符串则会作为提示信息返回给用户，同时不执行删除操作（数据库事务会回滚）</td></tr></tbody></table><p>范例代码见：<a href="https://gitee.com/crm8000/PSI/blob/master/web/Application/Home/Plugin/CodeTable/DemoBLL.class.php#L5" target="_blank" rel="noopener noreferrer">这里<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span></a></p><h2 id="码表列属性" tabindex="-1"><a class="header-anchor" href="#码表列属性" aria-hidden="true">#</a> 码表列属性</h2><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>列标题</td><td>列的标题会出现在视图列的标题和编辑页面中</td></tr><tr><td>列数据库名</td><td>该列数据库表中的字段名</td></tr><tr><td>列数据类型</td><td>支持varchar、int、decimal、datetime。列一旦创建，其数据类型就不能再修改</td></tr><tr><td>列数据长度</td><td>列数据类型是varchar的时候有效</td></tr><tr><td>列小数位数</td><td>列数据类型是decimal的时候有效</td></tr><tr><td>值来源</td><td>值的来源分为：用户直接录入、引用系统数据字典、引用其他码表、引用自身数据</td></tr><tr><td>引用表名</td><td>当值来源是需要引用其他数据的时候，指定的数据库表名</td></tr><tr><td>引用列名（关联用）</td><td>引用其他表的时候，和其他表关联的字段名。该字段是指引用表中的字段名。通常是码表的id字段。</td></tr><tr><td>引用列明（显示用）</td><td>引用其他表的时候，显示给用户的字段。例如：物料里面引用计量单位，显示计量单位的名称。</td></tr><tr><td>对用户可见</td><td>用户可见的列，在编辑界面和视图中就会出现。不可见的列，通常会作为后台业务逻辑字段来使用。</td></tr><tr><td>必须录入</td><td>列对用户可见的时候，本属性才有效。</td></tr><tr><td>列视图宽度</td><td>在码表的默认视图界面中，该列的宽度，以px为单位。如何更方便地设置本属性，请参见下面的可视化布局。</td></tr><tr><td>编辑界面显示次序</td><td>该列在编辑界面中出现的次序。如何更方便地设置本属性，请参见下面的可视化布局。</td></tr><tr><td>编辑器列占位</td><td>当码表的编辑布局列数大于1的时候，通过编辑器列占位，可以调整编辑界面布局。例如：编辑布局列数设置为4，编辑器列占位设置为3。可以类比HTML中table的colspan来理解这个属性的用途。</td></tr><tr><td>视图界面显示次序</td><td>该列在默认视图中的显示次序。如何更方便地设置本属性，请参见下面的可视化布局。</td></tr><tr><td>编辑器类型</td><td>编辑器类型对应的是ExtJS中的xtype，其数据来自系统数据字典t_sysdict_editor_xtype</td></tr></tbody></table><h2 id="可视化布局" tabindex="-1"><a class="header-anchor" href="#可视化布局" aria-hidden="true">#</a> 可视化布局</h2><p>目前PSI还没有实现完善的可视化布局功能，而是采用了变通的操作方式。</p><ul><li>默认视图列的布局调整</li></ul><p>把码表通过<code>主菜单维护</code>加入到主菜单后，该码表可以作为一个独立的模块使用。通过主菜单进入该码表模块，会有<code>开发者工具</code>， 其下有<code>保存列视图布局</code>。拖动列宽度和前后次序后，保存列视图布局，就可以在下次打开该模块的时候，保持当前设置的列宽度和次序。</p><ul><li>编辑界面的布局调整</li></ul><p>在<code>码表设置</code>模块中的有<code>调整编辑界面字段次序</code>，通过拖动列的先后次序来实现设置编辑字段的次序。</p><!--]--></div><footer class="page-meta"><!----><!----><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
    <script type="module" src="/help/assets/app.ae8b26c7.js" defer></script>
  </body>
</html>
